%{

// hello

%}

%pure_parser

%token T_NUMBER
%token T_MINUS

%left '^' '|' '&'
%left '+' '-'
%left '*' '/' '%'
%right '~' '!'
%nonassoc T_MINUS

%%

line
	:	expr
	|	/* empty */
;

expr
	:	'(' expr ')'			{ $$ = $2 }
	|	expr1					{ $$ = $1 }
	|	T_NUMBER				{ $$ = $1 }
	|	'~' expr				{ $$ = ~$2 }
	|	'!' expr				{ $$ = !$2 }
	|	'-' expr %prec T_MINUS	{ $$ = -$2 }
;

expr1
	:	expr1 '|' expr2			{ $$ = $1 | $3 }
	|	expr2					{ $$ = $1 }
;

expr2
	:	expr2 '&' expr3			{ $$ = $1 | $3 }
	|	expr3					{ $$ = $1 }
;

expr3
	:	expr3 '^' expr4			{ $$ = $1 | $3 }
	|	expr4					{ $$ = $1 }
;

expr4
	:	expr4 '+' expr5			{ $$ = $1 | $3 }
	|	expr5					{ $$ = $1 }
;

expr5
	:	expr5 '-' expr6			{ $$ = $1 | $3 }
	|	expr6					{ $$ = $1 }
;

expr6
	:	expr6 '%' expr7			{ $$ = $1 | $3 }
	|	expr7					{ $$ = $1 }
;

expr7
	:	expr7 '/' expr8			{ $$ = $1 | $3 }
	|	expr8					{ $$ = $1 }
;

expr8
	:	expr8 '*' expr			{ $$ = $1 | $3 }
	|	expr					{ $$ = $1 }
;


%%

int main()
{
	return 0;
}
